package com.example.clxy.service;

import com.example.clxy.entity.InnovationStudentGx;
import com.example.clxy.entity.dto.InnovationApplyDto;
import com.example.clxy.result.PageResult;
import com.example.clxy.result.WebRestResult;
import com.example.clxy.result.business.InnovationRemindResult;
import com.example.clxy.result.business.InnovationResult;
import com.example.clxy.result.business.PageResult.InnovationAdminPageResult;
import com.example.clxy.result.business.PageResult.InnovationStudentPageResult;
import com.example.clxy.result.business.PageResult.InnovationUserFilePageResult;
import com.example.clxy.result.business.StudentInnovationResult;
import org.springframework.data.domain.Page;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * @Author liuhaoqi
 * @Date 2020/8/10 15:17
 * @Version 1.0
 */
public interface InnovationService {
    WebRestResult addInnovation(InnovationApplyDto innovationApplyDto);

    WebRestResult updateInnovation(InnovationApplyDto innovationApplyDto);

    WebRestResult deleteInnovation(String innovationid);

    WebRestResult withdrawInnovation(String innovationid);

    WebRestResult approveInnovation(String innovationid, String applystatus, String rejectreason);

    WebRestResult applyInnovationStudent(String innovationid, String studentid, String applyreason, MultipartFile file);

    WebRestResult withdrawInnovationStudent(String innovationid, String studentid,String withdrawreason);

    WebRestResult uploadProjectFile(MultipartFile file, String innovationid, String userid);

    WebRestResult uploadApplyFile(MultipartFile file, String studentid,String innovationid);

    WebRestResult addInnovationStudent(@RequestBody InnovationStudentGx innovationStudent);

    WebRestResult updateInnovationStudent(InnovationStudentGx innovationStudent);

    WebRestResult approveInnovationByTeacher(String innovationid,String studentid, String status, String rejectreason);

    StudentInnovationResult getInnovationByIdStudent(String innovationid,String studentid);

    PageResult<InnovationAdminPageResult> getInnovationListByAdmin(String innovationname, String applystatus,int page, int pagesize);

    PageResult<InnovationAdminPageResult>  getInnovationListByTeacher(String innovationname, String teacherid, String applystatus,int page, int pagesize);

    PageResult<InnovationAdminPageResult> getInnovationListByStudent(String innovationname, String studentid,String applystatus, int page, int pagesize);

    WebRestResult finishInnovationByTeacher(String teacherid, String innovationid);

    WebRestResult applyInnovation(String innovationid);

    PageResult<InnovationAdminPageResult> getInnovationListToApply(String innovationname,String studentid, int page, int pagesize);

    StudentInnovationResult getInnovationStudentInfobyId(String innovationid, String studentid);

    InnovationResult getInnovationByIdTeacher(String innovationid, String teacherid);

    PageResult<InnovationStudentPageResult> getStudentListByIdAndStatus(String teacherid, String innovationid, String applystatus, int page, int pagesize);

    PageResult<InnovationAdminPageResult> getInnovationListByStudentWeb(String innovationname, String studentid, String applystatus, int page, int pagesize);

    PageResult<InnovationStudentPageResult> getStudentListByTeacherWeb(String innovationname, String teacherid, String applystatus, int page, int pagesize);

    WebRestResult uploadProjectfileByStudent(String innovationid, String studentid, String projectfile);

    PageResult<InnovationUserFilePageResult> getProjectfileList(String innovationid, int page, int pagesize);

    WebRestResult deleteProjectfile(String innovationid, String userid, String projectfilepath);

    PageResult<InnovationRemindResult> getInnovationRemindByTeacher(String teacherid);
}
